from sqlalchemy import Table, Column, Integer, String
from sqlalchemy.orm import mapper
from database import metadata, db_session, init_db, engine
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship, backref
from fase import Fase, fase
from permiso import Permiso, permiso
from usuario import Usuario, usuario

class Rol(object):
    """ Clase que define el modelo de la tabla rol """
    def __init__(self, nombre=None, descripcion=None, fase=None):
        """ Metodo init """
        self.nombre = nombre
        self.descripcion = descripcion
        self.fase = fase

    def __repr__(self):
        return self.nombre

rol = Table('rol', metadata,
    Column('idrol', Integer, primary_key=True),
    Column('nombre', String(50)),
    Column('descripcion', String(250)),
    Column('idfase', Integer, ForeignKey('fase.idfase')),
)

association_table2 = Table('permisosPorRol', metadata,
    Column('idpermiso', Integer, ForeignKey('permiso.idpermiso')),
    Column('idrol', Integer, ForeignKey('rol.idrol'))
)

association_table3 = Table('usuariosPorRol', metadata,
    Column('idusuario', Integer, ForeignKey('usuario.idusuario')),
    Column('idrol', Integer, ForeignKey('rol.idrol'))
)

mapper(Rol, rol, properties={
    'fase' : relationship(Fase, backref='roles'),
    'permisos' : relationship(Permiso, secondary=association_table2, backref='roles'),
    'usuarios' : relationship(Usuario, secondary=association_table3, backref='roles')
})